#include <iostream>     // std::cout, std::cin
#include <algorithm>    // std::sort
#include <vector>       // std::vector
#include <limits>
#include "local.h"

using namespace std;


vector <int> camino_u_v_local;
int w1_local, w2_local;




void local(vector<int> s1)
{
	w1_local, w2_local = 0; 
	camino_u_v_local = s1;
	for (int i = 0; i < s1.size()-1; i++)
	{
		w1_local += nodos[s1[i]].w[s1[i+1]].first;
		w2_local += nodos[s1[i]].w[s1[i+1]].second;
	}

	bool sisi = true;

	while (sisi)
	{
		sisi = soluciones_vecinas();
	}

	return;
}




bool soluciones_vecinas()
{
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < camino_u_v_local.size()-2; j++)
		{
			if(sonAdyacentes(&nodos[i], j))
			{
				if(no_esta_en_camino2(&nodos[i], camino_u_v_local))
				{
					int aux = camino_u_v_local[j+1];
					camino_u_v_local[j+1] = i;
					//cout << "cambie algo" << endl;
					//cout << aux << " " << i << endl; 
					return true;
				}
			}	
		}
	}
	return false;
}





bool sonAdyacentes(Nodo * nuevo, int j)
{
	Nodo * n2 = &nodos[camino_u_v_local[j]];
	if(nuevo->w[n2->numero].first > 0)
	{	
		Nodo * n3 = &nodos[camino_u_v_local[j+2]];
		if(nuevo->w[n3->numero].first > 0)
		{
			Nodo * a_reemplazar = &nodos[camino_u_v_local[j+1]];
			int aux_w1 = w1_local;
			int aux_w2 = w2_local;
			aux_w1 -= a_reemplazar->w[n2->numero].first  +  a_reemplazar->w[n3->numero].first;
			aux_w1 += nuevo->w[n2->numero].first         +  nuevo->w[n3->numero].first;
			aux_w2 += nuevo->w[n2->numero].second        +  nuevo->w[n3->numero].second;
			aux_w2 -= a_reemplazar->w[n2->numero].second +  a_reemplazar->w[n3->numero].second;
			if (aux_w1 <= K && aux_w2 < w2_local)
			{


				w1_local = aux_w1;
				w2_local = aux_w2;
				
				return true;
			}

		}
	}
	return false;

}




bool no_esta_en_camino2(Nodo * n1, vector<int> camino)
{
  for (int i = 0; i < camino.size(); i++)
  { 
    if (camino[i] == n1->numero)
    {
      return false;
    }
  }
  return true;
}
